package com.naiterui.ehp.bs.doctor.dao;

import com.naiterui.ehp.bp.domain.DoctorCharge;
import com.naiterui.ehp.bp.support.exception.BusinessException;

import java.util.List;
import java.util.Map;


/**
 * 医生收费信息持久层接口
 *
 * @author Amber
 * @since 1.0.0
 */
public interface IDoctorChargeDao {
    /**
     * 获取医生收费信息
     * IDoctorChargeDao.getDoctorCharges()
     *
     * @param doctorId 医生id
     *
     * @return 按收费类型返回所有类型的收费设置情况
     *
     * @Author Amber
     * @Date 2016年1月13日
     * @since 1.0.0
     */
    Map<Integer, DoctorCharge> getDoctorCharges(Long doctorId);

    /**
     * 获取医生某类收费设置信息
     * IDoctorChargeDao.getDoctorChargeByType()
     *
     * @param doctorId
     * @param type
     *
     * @return
     *
     * @Author Amber
     * @Date 2016年1月13日
     * @since 1.0.0
     */
    DoctorCharge getDoctorChargeByType(Long doctorId, int type);

    /**
     * 保存或更新收费设置
     * IDoctorChargeDao.saveOrUpdate()
     *
     * @param doctorCharge
     *
     * @throws BusinessException
     * @Author Amber
     * @Date 2016年1月13日
     * @since 1.0.0
     */
    void saveOrUpdate(DoctorCharge doctorCharge) throws BusinessException;


    /**
     * 获取指定医生开通服务信息集合
     *
     * @param doctorIdList 医生id列表
     * @param type         收费服务类型（1：图文；2：电话；4：视频）
     *
     * @return
     */
    Map<Long, DoctorCharge> getChargeMap(List<Long> doctorIdList, int type);

    /**
     * 获取资费
     * @param doctorId 医生id
     * @param chargeType 收费类型 1：图文；2：视频问诊
     * @return
     */
    DoctorCharge findFirstByDoctorIdAndChargeType(Long doctorId, Integer chargeType);
}
